1. Field of the Invention
The present invention relates to a method of changing a dynamic link library function efficiently and a computer system for executing the same.
2. Description of the Related Art
A linker is a program which links object modules, acquired by separate compiling, into a single loadable module by adjusting a reference relationship among the object modules or addresses thereof. To adjust a reference relationship among modules, a specific module registered in an object module library or a load module library is loaded as needed. In a case where a plurality of modules are linked, it is necessary to adjust the modules in such a way as to hold the adequate reference relationship among them and to allow execution of the modules to progress without problems. It is the biggest role of a linker to ensure such adjustment and link a plurality of modules into a single executable load module.
An object module does not consist only of a machine language program (the text portion), but also contains directory information called an external symbol directory and a relocation directory. Those directories are the important information sources for a linker. Registered in external symbol directory are external names and external references. The xe2x80x9cexternal namexe2x80x9d is a symbol name which can be referred to by another program module. The xe2x80x9cexternal referencexe2x80x9d, is a symbol name which is not defined in a local module. As an external name and external reference can be discriminated by an instruction in a source program, a language interpreting program identifies them and puts them in an object module. Each item registered in the external symbol directory contains an associated symbol name and information on where in the associated module that symbol name is used, i.e., an address at which the symbol name is used.
A linker collates the external name of a desired object module with an external reference, and gives the address for an external name to the external reference if the same name is found. This establishes linkage of both the external name and the external reference. In some cases, however, a match may not be found by merely referring to the external symbol directory of an input object module so that an unresolved external reference remains. In such a case, the linker searches an object module library or a load module library for a module to which a matching external name belongs and loads the module into a load module, and tries to find a matching external reference at the same time.
A set of object files of a previously prepared external function is called a library. An object file is a file which results from combining an external function and is stored in the form of an object program module. A library which is automatically linked by, for example, a C compiler is called a standard library.
A program in a library may take the form of a source program or may take the form of an object file. A program is linked to another program portion before compiling in the form of a source program, and after compiling in the form of an object file. In the case of linking a program after compiling, the linking action is called a linkage. There are two linkages: one is a static linkage which links a program module before executing it and the other is a dynamic linkage which carries out linking when a program is called after its execution has started. DLL, which is the latter linkage, is called a dynamic link library function where components or the like of Windows, the operating system which has substantially become standard in the field of personal computers, are stored. DLL is a library associated with a program, and can be shared by a plurality of program modules. A program module loads a DLL module into memory and uses it, whenever necessary. This DLL file helps reduce the program size an external memory device or memory, and enjoys merit of a shorter development time because correction or the like of software bugs can be implemented by rewriting only a target DLL file.
To alter the process of a dynamic link library function (X) to be used by a program module, conventionally, a dynamic link library function (Y) which includes a process equivalent to that of the dynamic link library function (X) is generated and the program module should be so modified as to call that function.
However, a dynamic link library including the dynamic link library function (Y) should have functions equivalent to all the dynamic link library functions included in a dynamic link library which includes the dynamic link library function (X). When there is no available means which acquires source codes of the dynamic link library function (X) and makes modification based on the source codes or when the total number of dynamic link library functions included in a dynamic link library is large, an extensive developing cost is required to alter the process of the dynamic link library function (X).
Accordingly, it is an object of the present invention to efficiently alter a dynamic link library function, at the time of generating a dynamic link library including a dynamic link library function (Y), by suppressing, as much as possible, the amount of codes to be newly added or generated for other portions of the dynamic link library function (Y) than those which are to be changed.
It is another object of this invention to provide a method of changing an external function to be referred, without recompiling a program module, by altering external function reference information described in the program module, and a computer system which executes the method.
According to one aspect of this invention, in a program module, which implements dynamic linkage to an external function and executes the external function, a function name described in a header portion of a program module and a function name to be referred to by the program module are replaced with other names, and functions having the same names as the replaced function names are linked and are executed in place of an original function. Further, an original function is executed using the functions having the same names as the replaced function names, and a preprocess or a postprocess for the original function is described and is executed to thereby expand a function without altering the original function.
According to another aspect of this invention, in a library A to be dynamically linked at-a time of executing a program module, a library B having the same name as the function A and including functions having the same names as functions included in the library A is dynamically linked and executed at the time of executing the program module, a library name described in the original library A and a function name, which can externally be referred to, are replaced with other names, and a function in the original library A is executed from a function in the library B and at the same time a preprocess or a postprocess is executed, whereby the preprocess or postprocess is added to a library function.
With the above structure, at the time of generating a dynamic link library including a dynamic link library function (Y), the amount- of codes to be newly added or generated for other portions of the dynamic link library function (Y) than those which are to be changed can be suppressed as much as possible. This can ensure efficient alteration of a dynamic link library function.